package com.cy.detectsys.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

import static com.cy.detectsys.constant.LocalPathContant.BATH_PATH;

@Slf4j
public class FileOperateUtil {

    /**
     * 遍历删除文件夹
     *
     * @param folderPath
     */
    public static void deleteFolder(String folderPath) {
        File folder = new File(folderPath);
        if (folder.exists()) {
            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        deleteFolder(file.getAbsolutePath()); // 递归删除子文件夹
                    } else {
                        file.delete(); // 删除文件
                    }
                }
            }
            folder.delete(); // 删除当前文件夹
        }
    }


    /**
     * 检查指定目录下是否存在指定名称的文件。
     *
     * @param directoryPath 目录的路径
     * @param fileName      要检查的文件名
     * @return 如果文件存在返回true，否则返回false
     */
    public static boolean fileExists(String directoryPath, String fileName) {
        // 创建File对象来表示目录
        File directory = new File(directoryPath);

        // 检查目录是否存在且是目录
        if (directory.exists() && directory.isDirectory()) {
            // 在目录下查找文件
            File file = new File(directoryPath + File.separator + fileName);

            // 检查文件是否存在
            return file.exists();
        } else {
            // 如果目录不存在或不是目录，返回false
            return false;
        }
    }


    /**
     * 将文件从一个路径移动到另一个路径。
     *
     * @param sourcePath 文件当前的路径
     * @param targetPath 目标目录的路径
     * @param fileName   要移动的文件的名称
     * @throws IOException 如果移动过程中发生I/O错误
     */
    public static void moveFile(String sourcePath, String targetPath, String fileName) throws IOException {
        // 创建源文件的Path对象
        Path sourceFile = Paths.get(sourcePath, fileName);

        // 创建目标文件的Path对象，目标文件将具有与源文件相同的名称
        Path targetFile = Paths.get(targetPath, fileName);

        // 移动文件
        Files.move(sourceFile, targetFile, StandardCopyOption.REPLACE_EXISTING);
    }

    /**
     * 将文件从一个路径移动到另一个路径。
     *
     * @param targetPath 目标目录的路径
     * @throws IOException 如果移动过程中发生I/O错误
     */
    public static void moveFile(File file, String targetPath) throws IOException {
        // 创建源文件的Path对象
        Path sourceFile = file.toPath();

        // 创建目标文件的Path对象，目标文件将具有与源文件相同的名称
        Path targetFile = Paths.get(targetPath, file.getName());

        // 移动文件
        Files.move(sourceFile, targetFile, StandardCopyOption.REPLACE_EXISTING);
        log.info("文件转移成功：" + targetFile.getFileName());

    }


    public static File multipartFileToFile(MultipartFile multipartFile) {
        String originalFilename = multipartFile.getOriginalFilename();
        try {
            String destPath = BATH_PATH + File.separator + originalFilename;
            File file = new File(destPath);
            if (file.exists()) {
                file.delete();
            }

            multipartFile.transferTo(file);
            return file;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }


}

